// export game_type ; export def_viditelnost , def_sdilene_videni , def_leceni , def_hp ; export viditelnost , sdilene_videni , hp ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams , Side_IsSpec ; export Side_Positions , Side_Nations , Side_Names , Team_Names , Team_Game ; export start_def , commander ; var global_units , global_defined , soldiers_created ; function cteni_multiplayeru_a_hernich_parametru ; var side , dep , br1 , br2 , br3 , un , i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
   7: PPUSH
   8: PPUSH
   9: PPUSH
// if MultiPlayer then
  10: LD_OWVAR 4
  14: IFFALSE 88
// begin Game_Type = mp_game_type ;
  16: LD_ADDR_EXP 1
  20: PUSH
  21: LD_OWVAR 6
  25: ST_TO_ADDR
// Player_Side = mp_player_side ;
  26: LD_ADDR_EXP 11
  30: PUSH
  31: LD_OWVAR 7
  35: ST_TO_ADDR
// Player_Team = mp_player_team ;
  36: LD_ADDR_EXP 12
  40: PUSH
  41: LD_OWVAR 8
  45: ST_TO_ADDR
// Side_Positions = mp_sides_positions ;
  46: LD_ADDR_EXP 16
  50: PUSH
  51: LD_OWVAR 17
  55: ST_TO_ADDR
// Side_Teams = mp_sides_teams ;
  56: LD_ADDR_EXP 13
  60: PUSH
  61: LD_OWVAR 15
  65: ST_TO_ADDR
// Side_Nations = mp_sides_nations ;
  66: LD_ADDR_EXP 17
  70: PUSH
  71: LD_OWVAR 16
  75: ST_TO_ADDR
// Teams = mp_teams ;
  76: LD_ADDR_EXP 14
  80: PUSH
  81: LD_OWVAR 12
  85: ST_TO_ADDR
// end else
  86: GO 264
// begin Game_Type = 2 ;
  88: LD_ADDR_EXP 1
  92: PUSH
  93: LD_INT 2
  95: ST_TO_ADDR
// Player_Side = 1 ;
  96: LD_ADDR_EXP 11
 100: PUSH
 101: LD_INT 1
 103: ST_TO_ADDR
// Player_Team = 1 ;
 104: LD_ADDR_EXP 12
 108: PUSH
 109: LD_INT 1
 111: ST_TO_ADDR
// Side_Positions = [ 2 , 4 , 1 , 3 , 0 , 0 , 0 , 0 ] ;
 112: LD_ADDR_EXP 16
 116: PUSH
 117: LD_INT 2
 119: PUSH
 120: LD_INT 4
 122: PUSH
 123: LD_INT 1
 125: PUSH
 126: LD_INT 3
 128: PUSH
 129: LD_INT 0
 131: PUSH
 132: LD_INT 0
 134: PUSH
 135: LD_INT 0
 137: PUSH
 138: LD_INT 0
 140: PUSH
 141: EMPTY
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: LIST
 148: LIST
 149: LIST
 150: ST_TO_ADDR
// Side_Teams = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
 151: LD_ADDR_EXP 13
 155: PUSH
 156: LD_INT 0
 158: PUSH
 159: LD_INT 0
 161: PUSH
 162: LD_INT 0
 164: PUSH
 165: LD_INT 0
 167: PUSH
 168: LD_INT 0
 170: PUSH
 171: LD_INT 0
 173: PUSH
 174: LD_INT 0
 176: PUSH
 177: LD_INT 0
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: LIST
 187: LIST
 188: LIST
 189: ST_TO_ADDR
// Side_Nations = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] ;
 190: LD_ADDR_EXP 17
 194: PUSH
 195: LD_INT 1
 197: PUSH
 198: LD_INT 1
 200: PUSH
 201: LD_INT 1
 203: PUSH
 204: LD_INT 1
 206: PUSH
 207: LD_INT 1
 209: PUSH
 210: LD_INT 1
 212: PUSH
 213: LD_INT 1
 215: PUSH
 216: LD_INT 1
 218: PUSH
 219: EMPTY
 220: LIST
 221: LIST
 222: LIST
 223: LIST
 224: LIST
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// Teams = [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ;
 229: LD_ADDR_EXP 14
 233: PUSH
 234: LD_INT 1
 236: PUSH
 237: EMPTY
 238: LIST
 239: PUSH
 240: LD_INT 2
 242: PUSH
 243: EMPTY
 244: LIST
 245: PUSH
 246: LD_INT 3
 248: PUSH
 249: EMPTY
 250: LIST
 251: PUSH
 252: LD_INT 4
 254: PUSH
 255: EMPTY
 256: LIST
 257: PUSH
 258: EMPTY
 259: LIST
 260: LIST
 261: LIST
 262: LIST
 263: ST_TO_ADDR
// end ; Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 264: LD_ADDR_EXP 9
 268: PUSH
 269: LD_EXP 16
 273: PUSH
 274: LD_INT 0
 276: PUSH
 277: EMPTY
 278: LIST
 279: DIFF
 280: PUSH
 281: LD_INT 0
 283: PLUS
 284: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 285: LD_ADDR_EXP 10
 289: PUSH
 290: LD_EXP 13
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: EMPTY
 299: LIST
 300: DIFF
 301: PUSH
 302: LD_INT 0
 304: PLUS
 305: ST_TO_ADDR
// if MultiPlayer then
 306: LD_OWVAR 4
 310: IFFALSE 353
// begin def_viditelnost = GetMultiplayerSetting ( 2 ) ;
 312: LD_ADDR_EXP 2
 316: PUSH
 317: LD_INT 2
 319: PPUSH
 320: CALL_OW 426
 324: ST_TO_ADDR
// def_sdilene_videni = GetMultiplayerSetting ( 3 ) ;
 325: LD_ADDR_EXP 3
 329: PUSH
 330: LD_INT 3
 332: PPUSH
 333: CALL_OW 426
 337: ST_TO_ADDR
// def_leceni = GetMultiplayerSetting ( 4 ) ;
 338: LD_ADDR_EXP 4
 342: PUSH
 343: LD_INT 4
 345: PPUSH
 346: CALL_OW 426
 350: ST_TO_ADDR
// end else
 351: GO 381
// begin randomize ;
 353: CALL_OW 10
// def_viditelnost = 0 ;
 357: LD_ADDR_EXP 2
 361: PUSH
 362: LD_INT 0
 364: ST_TO_ADDR
// def_sdilene_videni = 1 ;
 365: LD_ADDR_EXP 3
 369: PUSH
 370: LD_INT 1
 372: ST_TO_ADDR
// def_leceni = 1 ;
 373: LD_ADDR_EXP 4
 377: PUSH
 378: LD_INT 1
 380: ST_TO_ADDR
// end ; hp = 20 ;
 381: LD_ADDR_EXP 8
 385: PUSH
 386: LD_INT 20
 388: ST_TO_ADDR
// start_def := [ [ 16 , 11 ] , [ 96 , 13 ] , [ 144 , 108 ] , [ 66 , 107 ] ] ;
 389: LD_ADDR_EXP 21
 393: PUSH
 394: LD_INT 16
 396: PUSH
 397: LD_INT 11
 399: PUSH
 400: EMPTY
 401: LIST
 402: LIST
 403: PUSH
 404: LD_INT 96
 406: PUSH
 407: LD_INT 13
 409: PUSH
 410: EMPTY
 411: LIST
 412: LIST
 413: PUSH
 414: LD_INT 144
 416: PUSH
 417: LD_INT 108
 419: PUSH
 420: EMPTY
 421: LIST
 422: LIST
 423: PUSH
 424: LD_INT 66
 426: PUSH
 427: LD_INT 107
 429: PUSH
 430: EMPTY
 431: LIST
 432: LIST
 433: PUSH
 434: EMPTY
 435: LIST
 436: LIST
 437: LIST
 438: LIST
 439: ST_TO_ADDR
// end ;
 440: LD_VAR 0 1
 444: RET
// function set_spolecne_videni_a_spojenectvi ; var i , j ; begin
 445: LD_INT 0
 447: PPUSH
 448: PPUSH
 449: PPUSH
// Team_Game := 0 ;
 450: LD_ADDR_EXP 20
 454: PUSH
 455: LD_INT 0
 457: ST_TO_ADDR
// for i = 1 to 8 do
 458: LD_ADDR_VAR 0 2
 462: PUSH
 463: DOUBLE
 464: LD_INT 1
 466: DEC
 467: ST_TO_ADDR
 468: LD_INT 8
 470: PUSH
 471: FOR_TO
 472: IFFALSE 498
// Team_Game := Team_Game + Side_Teams [ i ] ;
 474: LD_ADDR_EXP 20
 478: PUSH
 479: LD_EXP 20
 483: PUSH
 484: LD_EXP 13
 488: PUSH
 489: LD_VAR 0 2
 493: ARRAY
 494: PLUS
 495: ST_TO_ADDR
 496: GO 471
 498: POP
 499: POP
// if not Team_Game then
 500: LD_EXP 20
 504: NOT
 505: IFFALSE 517
// Team_Game := false else
 507: LD_ADDR_EXP 20
 511: PUSH
 512: LD_INT 0
 514: ST_TO_ADDR
 515: GO 525
// Team_Game := true ;
 517: LD_ADDR_EXP 20
 521: PUSH
 522: LD_INT 1
 524: ST_TO_ADDR
// if not Team_Game then
 525: LD_EXP 20
 529: NOT
 530: IFFALSE 628
// begin for i = 1 to 8 do
 532: LD_ADDR_VAR 0 2
 536: PUSH
 537: DOUBLE
 538: LD_INT 1
 540: DEC
 541: ST_TO_ADDR
 542: LD_INT 8
 544: PUSH
 545: FOR_TO
 546: IFFALSE 624
// for j = 1 to 8 do
 548: LD_ADDR_VAR 0 3
 552: PUSH
 553: DOUBLE
 554: LD_INT 1
 556: DEC
 557: ST_TO_ADDR
 558: LD_INT 8
 560: PUSH
 561: FOR_TO
 562: IFFALSE 620
// if i <> j then
 564: LD_VAR 0 2
 568: PUSH
 569: LD_VAR 0 3
 573: NONEQUAL
 574: IFFALSE 598
// SetAttitude ( i , j , att_enemy , true ) else
 576: LD_VAR 0 2
 580: PPUSH
 581: LD_VAR 0 3
 585: PPUSH
 586: LD_INT 2
 588: PPUSH
 589: LD_INT 1
 591: PPUSH
 592: CALL_OW 80
 596: GO 618
// SetAttitude ( i , j , att_friend , true ) ;
 598: LD_VAR 0 2
 602: PPUSH
 603: LD_VAR 0 3
 607: PPUSH
 608: LD_INT 1
 610: PPUSH
 611: LD_INT 1
 613: PPUSH
 614: CALL_OW 80
 618: GO 561
 620: POP
 621: POP
 622: GO 545
 624: POP
 625: POP
// end else
 626: GO 803
// begin if def_sdilene_videni then
 628: LD_EXP 3
 632: IFFALSE 697
// begin for i in Teams do
 634: LD_ADDR_VAR 0 2
 638: PUSH
 639: LD_EXP 14
 643: PUSH
 644: FOR_IN
 645: IFFALSE 695
// for j = 2 to i do
 647: LD_ADDR_VAR 0 3
 651: PUSH
 652: DOUBLE
 653: LD_INT 2
 655: DEC
 656: ST_TO_ADDR
 657: LD_VAR 0 2
 661: PUSH
 662: FOR_TO
 663: IFFALSE 691
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
 665: LD_VAR 0 2
 669: PUSH
 670: LD_VAR 0 3
 674: ARRAY
 675: PPUSH
 676: LD_VAR 0 2
 680: PUSH
 681: LD_INT 1
 683: ARRAY
 684: PPUSH
 685: CALL_OW 343
 689: GO 662
 691: POP
 692: POP
 693: GO 644
 695: POP
 696: POP
// end ; for i = 1 to 8 do
 697: LD_ADDR_VAR 0 2
 701: PUSH
 702: DOUBLE
 703: LD_INT 1
 705: DEC
 706: ST_TO_ADDR
 707: LD_INT 8
 709: PUSH
 710: FOR_TO
 711: IFFALSE 801
// for j = 1 to 8 do
 713: LD_ADDR_VAR 0 3
 717: PUSH
 718: DOUBLE
 719: LD_INT 1
 721: DEC
 722: ST_TO_ADDR
 723: LD_INT 8
 725: PUSH
 726: FOR_TO
 727: IFFALSE 797
// if Side_Teams [ i ] = Side_Teams [ j ] then
 729: LD_EXP 13
 733: PUSH
 734: LD_VAR 0 2
 738: ARRAY
 739: PUSH
 740: LD_EXP 13
 744: PUSH
 745: LD_VAR 0 3
 749: ARRAY
 750: EQUAL
 751: IFFALSE 775
// SetAttitude ( i , j , att_friend , true ) else
 753: LD_VAR 0 2
 757: PPUSH
 758: LD_VAR 0 3
 762: PPUSH
 763: LD_INT 1
 765: PPUSH
 766: LD_INT 1
 768: PPUSH
 769: CALL_OW 80
 773: GO 795
// SetAttitude ( i , j , att_enemy , true ) ;
 775: LD_VAR 0 2
 779: PPUSH
 780: LD_VAR 0 3
 784: PPUSH
 785: LD_INT 2
 787: PPUSH
 788: LD_INT 1
 790: PPUSH
 791: CALL_OW 80
 795: GO 726
 797: POP
 798: POP
 799: GO 710
 801: POP
 802: POP
// end ; end ;
 803: LD_VAR 0 1
 807: RET
// function priprava_strany ( side ) ; var pos , x , y , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
 808: LD_INT 0
 810: PPUSH
 811: PPUSH
 812: PPUSH
 813: PPUSH
 814: PPUSH
 815: PPUSH
 816: PPUSH
 817: PPUSH
 818: PPUSH
 819: PPUSH
 820: PPUSH
 821: PPUSH
 822: PPUSH
// pos := Side_Positions [ side ] ;
 823: LD_ADDR_VAR 0 3
 827: PUSH
 828: LD_EXP 16
 832: PUSH
 833: LD_VAR 0 1
 837: ARRAY
 838: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
 839: LD_ADDR_OWVAR 21
 843: PUSH
 844: LD_EXP 17
 848: PUSH
 849: LD_VAR 0 1
 853: ARRAY
 854: ST_TO_ADDR
// uc_side := side ;
 855: LD_ADDR_OWVAR 20
 859: PUSH
 860: LD_VAR 0 1
 864: ST_TO_ADDR
// x := start_def [ pos ] [ 1 ] ;
 865: LD_ADDR_VAR 0 4
 869: PUSH
 870: LD_EXP 21
 874: PUSH
 875: LD_VAR 0 3
 879: ARRAY
 880: PUSH
 881: LD_INT 1
 883: ARRAY
 884: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
 885: LD_ADDR_VAR 0 5
 889: PUSH
 890: LD_EXP 21
 894: PUSH
 895: LD_VAR 0 3
 899: ARRAY
 900: PUSH
 901: LD_INT 2
 903: ARRAY
 904: ST_TO_ADDR
// case pos of 1 :
 905: LD_VAR 0 3
 909: PUSH
 910: LD_INT 1
 912: DOUBLE
 913: EQUAL
 914: IFTRUE 918
 916: GO 951
 918: POP
// Setside ( FilterUnitsInArea ( Levy_horni , [ [ f_type , unit_vehicle ] ] ) , side ) ; 2 :
 919: LD_INT 11
 921: PPUSH
 922: LD_INT 21
 924: PUSH
 925: LD_INT 2
 927: PUSH
 928: EMPTY
 929: LIST
 930: LIST
 931: PUSH
 932: EMPTY
 933: LIST
 934: PPUSH
 935: CALL_OW 70
 939: PPUSH
 940: LD_VAR 0 1
 944: PPUSH
 945: CALL_OW 235
 949: GO 1075
 951: LD_INT 2
 953: DOUBLE
 954: EQUAL
 955: IFTRUE 959
 957: GO 992
 959: POP
// Setside ( FilterUnitsInArea ( Pravy_horni , [ [ f_type , unit_vehicle ] ] ) , side ) ; 3 :
 960: LD_INT 12
 962: PPUSH
 963: LD_INT 21
 965: PUSH
 966: LD_INT 2
 968: PUSH
 969: EMPTY
 970: LIST
 971: LIST
 972: PUSH
 973: EMPTY
 974: LIST
 975: PPUSH
 976: CALL_OW 70
 980: PPUSH
 981: LD_VAR 0 1
 985: PPUSH
 986: CALL_OW 235
 990: GO 1075
 992: LD_INT 3
 994: DOUBLE
 995: EQUAL
 996: IFTRUE 1000
 998: GO 1033
1000: POP
// Setside ( FilterUnitsInArea ( Pravy_dolni , [ [ f_type , unit_vehicle ] ] ) , side ) ; 4 :
1001: LD_INT 14
1003: PPUSH
1004: LD_INT 21
1006: PUSH
1007: LD_INT 2
1009: PUSH
1010: EMPTY
1011: LIST
1012: LIST
1013: PUSH
1014: EMPTY
1015: LIST
1016: PPUSH
1017: CALL_OW 70
1021: PPUSH
1022: LD_VAR 0 1
1026: PPUSH
1027: CALL_OW 235
1031: GO 1075
1033: LD_INT 4
1035: DOUBLE
1036: EQUAL
1037: IFTRUE 1041
1039: GO 1074
1041: POP
// Setside ( FilterUnitsInArea ( Levy_dolni , [ [ f_type , unit_vehicle ] ] ) , side ) ; end ;
1042: LD_INT 13
1044: PPUSH
1045: LD_INT 21
1047: PUSH
1048: LD_INT 2
1050: PUSH
1051: EMPTY
1052: LIST
1053: LIST
1054: PUSH
1055: EMPTY
1056: LIST
1057: PPUSH
1058: CALL_OW 70
1062: PPUSH
1063: LD_VAR 0 1
1067: PPUSH
1068: CALL_OW 235
1072: GO 1075
1074: POP
// end ;
1075: LD_VAR 0 2
1079: RET
// function priprava_stran ; var i ; begin
1080: LD_INT 0
1082: PPUSH
1083: PPUSH
// global_units := [ ] ;
1084: LD_ADDR_LOC 1
1088: PUSH
1089: EMPTY
1090: ST_TO_ADDR
// global_defined := false ;
1091: LD_ADDR_LOC 2
1095: PUSH
1096: LD_INT 0
1098: ST_TO_ADDR
// for i := 1 to Side_Positions do
1099: LD_ADDR_VAR 0 2
1103: PUSH
1104: DOUBLE
1105: LD_INT 1
1107: DEC
1108: ST_TO_ADDR
1109: LD_EXP 16
1113: PUSH
1114: FOR_TO
1115: IFFALSE 1140
// if Side_Positions [ i ] then
1117: LD_EXP 16
1121: PUSH
1122: LD_VAR 0 2
1126: ARRAY
1127: IFFALSE 1138
// priprava_strany ( i ) ;
1129: LD_VAR 0 2
1133: PPUSH
1134: CALL 808 0 1
1138: GO 1114
1140: POP
1141: POP
// end ;
1142: LD_VAR 0 1
1146: RET
// function odstranit_sede_vehikly ; var un ; begin
1147: LD_INT 0
1149: PPUSH
1150: PPUSH
// for un in FilterAllUnits ( [ [ f_type , unit_vehicle ] , [ f_side , 0 ] ] ) do
1151: LD_ADDR_VAR 0 2
1155: PUSH
1156: LD_INT 21
1158: PUSH
1159: LD_INT 2
1161: PUSH
1162: EMPTY
1163: LIST
1164: LIST
1165: PUSH
1166: LD_INT 22
1168: PUSH
1169: LD_INT 0
1171: PUSH
1172: EMPTY
1173: LIST
1174: LIST
1175: PUSH
1176: EMPTY
1177: LIST
1178: LIST
1179: PPUSH
1180: CALL_OW 69
1184: PUSH
1185: FOR_IN
1186: IFFALSE 1199
// RemoveUnit ( un ) ;
1188: LD_VAR 0 2
1192: PPUSH
1193: CALL_OW 64
1197: GO 1185
1199: POP
1200: POP
// end ;
1201: LD_VAR 0 1
1205: RET
// function Init_Win_Condition ; begin
1206: LD_INT 0
1208: PPUSH
// if Team_Game then
1209: LD_EXP 20
1213: IFFALSE 1220
// enable ( 98 ) else
1215: LD_INT 98
1217: ENABLE_MARKED
1218: GO 1223
// enable ( 99 ) ;
1220: LD_INT 99
1222: ENABLE_MARKED
// end ;
1223: LD_VAR 0 1
1227: RET
// starting begin disable ( 01 ) ;
1228: LD_INT 1
1230: DISABLE_MARKED
// disable ( 98 ) ;
1231: LD_INT 98
1233: DISABLE_MARKED
// disable ( 99 ) ;
1234: LD_INT 99
1236: DISABLE_MARKED
// disable ( 400 ) ;
1237: LD_INT 400
1239: DISABLE_MARKED
// disable ( 401 ) ;
1240: LD_INT 401
1242: DISABLE_MARKED
// mp_selectmsg := true ;
1243: LD_ADDR_OWVAR 13
1247: PUSH
1248: LD_INT 1
1250: ST_TO_ADDR
// cteni_multiplayeru_a_hernich_parametru ;
1251: CALL 0 0 0
// set_spolecne_videni_a_spojenectvi ;
1255: CALL 445 0 0
// priprava_stran ;
1259: CALL 1080 0 0
// your_side := Player_Side ;
1263: LD_ADDR_OWVAR 2
1267: PUSH
1268: LD_EXP 11
1272: ST_TO_ADDR
// ResetFog ;
1273: CALL_OW 335
// MP_param ;
1277: CALL 1378 0 0
// Init_Win_Condition ;
1281: CALL 1206 0 0
// music_nat := Side_Nations [ your_side ] ;
1285: LD_ADDR_OWVAR 71
1289: PUSH
1290: LD_EXP 17
1294: PUSH
1295: LD_OWVAR 2
1299: ARRAY
1300: ST_TO_ADDR
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
1301: LD_EXP 21
1305: PUSH
1306: LD_EXP 16
1310: PUSH
1311: LD_OWVAR 2
1315: ARRAY
1316: ARRAY
1317: PUSH
1318: LD_INT 1
1320: ARRAY
1321: PPUSH
1322: LD_EXP 21
1326: PUSH
1327: LD_EXP 16
1331: PUSH
1332: LD_OWVAR 2
1336: ARRAY
1337: ARRAY
1338: PUSH
1339: LD_INT 2
1341: ARRAY
1342: PPUSH
1343: CALL_OW 86
// Anticheatcheck ;
1347: CALL_OW 514
// odstranit_sede_vehikly ;
1351: CALL 1147 0 0
// end ; end_of_file
1355: END
// every 0 0$1 + 0 0$0.1 do
1356: GO 1358
1358: DISABLE
// begin display_strings = [ #Multi1x1-Time , tick ] ;
1359: LD_ADDR_OWVAR 47
1363: PUSH
1364: LD_STRING #Multi1x1-Time
1366: PUSH
1367: LD_OWVAR 1
1371: PUSH
1372: EMPTY
1373: LIST
1374: LIST
1375: ST_TO_ADDR
// enable ;
1376: ENABLE
// end ; end_of_file
1377: END
// export function MP_param ; var i ; begin
1378: LD_INT 0
1380: PPUSH
1381: PPUSH
// case def_viditelnost of 0 :
1382: LD_EXP 2
1386: PUSH
1387: LD_INT 0
1389: DOUBLE
1390: EQUAL
1391: IFTRUE 1395
1393: GO 1427
1395: POP
// for i = 1 to 8 do
1396: LD_ADDR_VAR 0 2
1400: PUSH
1401: DOUBLE
1402: LD_INT 1
1404: DEC
1405: ST_TO_ADDR
1406: LD_INT 8
1408: PUSH
1409: FOR_TO
1410: IFFALSE 1423
// ClearAllFogForSide ( i ) ; 1 :
1412: LD_VAR 0 2
1416: PPUSH
1417: CALL_OW 520
1421: GO 1409
1423: POP
1424: POP
1425: GO 1446
1427: LD_INT 1
1429: DOUBLE
1430: EQUAL
1431: IFTRUE 1435
1433: GO 1445
1435: POP
// FogOff ( 1 ) ; end ;
1436: LD_INT 1
1438: PPUSH
1439: CALL_OW 344
1443: GO 1446
1445: POP
// if def_leceni then
1446: LD_EXP 4
1450: IFFALSE 1455
// enable ( 01 ) ;
1452: LD_INT 1
1454: ENABLE_MARKED
// end ;
1455: LD_VAR 0 1
1459: RET
// every 0 0$1 marked 01 do var veh ;
1460: GO 1462
1462: DISABLE
1463: LD_INT 0
1465: PPUSH
// begin for veh in FilterUnitsInArea ( middle , [ [ f_type , unit_vehicle ] , [ f_lives , 251 ] ] ) do
1466: LD_ADDR_VAR 0 1
1470: PUSH
1471: LD_INT 7
1473: PPUSH
1474: LD_INT 21
1476: PUSH
1477: LD_INT 2
1479: PUSH
1480: EMPTY
1481: LIST
1482: LIST
1483: PUSH
1484: LD_INT 24
1486: PUSH
1487: LD_INT 251
1489: PUSH
1490: EMPTY
1491: LIST
1492: LIST
1493: PUSH
1494: EMPTY
1495: LIST
1496: LIST
1497: PPUSH
1498: CALL_OW 70
1502: PUSH
1503: FOR_IN
1504: IFFALSE 1628
// begin if GetLives ( veh ) = 1000 then
1506: LD_VAR 0 1
1510: PPUSH
1511: CALL_OW 256
1515: PUSH
1516: LD_INT 1000
1518: EQUAL
1519: IFFALSE 1523
// else
1521: GO 1626
// if GetLives ( veh ) <= ( 1000 - hp ) then
1523: LD_VAR 0 1
1527: PPUSH
1528: CALL_OW 256
1532: PUSH
1533: LD_INT 1000
1535: PUSH
1536: LD_EXP 8
1540: MINUS
1541: LESSEQUAL
1542: IFFALSE 1571
// SetLives ( veh , GetLives ( veh ) + hp ) else
1544: LD_VAR 0 1
1548: PPUSH
1549: LD_VAR 0 1
1553: PPUSH
1554: CALL_OW 256
1558: PUSH
1559: LD_EXP 8
1563: PLUS
1564: PPUSH
1565: CALL_OW 234
1569: GO 1626
// if GetLives ( veh ) > ( 1000 - hp ) then
1571: LD_VAR 0 1
1575: PPUSH
1576: CALL_OW 256
1580: PUSH
1581: LD_INT 1000
1583: PUSH
1584: LD_EXP 8
1588: MINUS
1589: GREATER
1590: IFFALSE 1626
// SetLives ( veh , GetLives ( veh ) + ( 1000 - GetLives ( veh ) ) ) ;
1592: LD_VAR 0 1
1596: PPUSH
1597: LD_VAR 0 1
1601: PPUSH
1602: CALL_OW 256
1606: PUSH
1607: LD_INT 1000
1609: PUSH
1610: LD_VAR 0 1
1614: PPUSH
1615: CALL_OW 256
1619: MINUS
1620: PLUS
1621: PPUSH
1622: CALL_OW 234
// end ;
1626: GO 1503
1628: POP
1629: POP
// enable ;
1630: ENABLE
// end ; end_of_file
1631: PPOPN 1
1633: END
// function CanWinLoose ; begin
1634: LD_INT 0
1636: PPUSH
// Result := true ;
1637: LD_ADDR_VAR 0 1
1641: PUSH
1642: LD_INT 1
1644: ST_TO_ADDR
// if IAmServer and PlayerCount > 0 then
1645: CALL_OW 518
1649: PUSH
1650: CALL_OW 519
1654: PUSH
1655: LD_INT 0
1657: GREATER
1658: AND
1659: IFFALSE 1669
// Result := false ;
1661: LD_ADDR_VAR 0 1
1665: PUSH
1666: LD_INT 0
1668: ST_TO_ADDR
// if IAmSpec and PlayerCount > 1 then
1669: CALL_OW 531
1673: PUSH
1674: CALL_OW 519
1678: PUSH
1679: LD_INT 1
1681: GREATER
1682: AND
1683: IFFALSE 1693
// Result := false ;
1685: LD_ADDR_VAR 0 1
1689: PUSH
1690: LD_INT 0
1692: ST_TO_ADDR
// end ;
1693: LD_VAR 0 1
1697: RET
// function HasPower ( i ) ; begin
1698: LD_INT 0
1700: PPUSH
// Result := FilterAllUnits ( [ [ f_side , i ] , [ f_type , unit_vehicle ] , [ f_lives , 250 ] ] ) ;
1701: LD_ADDR_VAR 0 2
1705: PUSH
1706: LD_INT 22
1708: PUSH
1709: LD_VAR 0 1
1713: PUSH
1714: EMPTY
1715: LIST
1716: LIST
1717: PUSH
1718: LD_INT 21
1720: PUSH
1721: LD_INT 2
1723: PUSH
1724: EMPTY
1725: LIST
1726: LIST
1727: PUSH
1728: LD_INT 24
1730: PUSH
1731: LD_INT 250
1733: PUSH
1734: EMPTY
1735: LIST
1736: LIST
1737: PUSH
1738: EMPTY
1739: LIST
1740: LIST
1741: LIST
1742: PPUSH
1743: CALL_OW 69
1747: ST_TO_ADDR
// end ;
1748: LD_VAR 0 2
1752: RET
// function AlliedSides ( i , j ) ; begin
1753: LD_INT 0
1755: PPUSH
// Result := false ;
1756: LD_ADDR_VAR 0 3
1760: PUSH
1761: LD_INT 0
1763: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
1764: LD_VAR 0 1
1768: PPUSH
1769: LD_VAR 0 2
1773: PPUSH
1774: CALL_OW 81
1778: PUSH
1779: LD_INT 1
1781: EQUAL
1782: PUSH
1783: LD_VAR 0 2
1787: PPUSH
1788: LD_VAR 0 1
1792: PPUSH
1793: CALL_OW 81
1797: PUSH
1798: LD_INT 1
1800: EQUAL
1801: AND
1802: PUSH
1803: LD_VAR 0 1
1807: PPUSH
1808: CALL_OW 83
1812: AND
1813: PUSH
1814: LD_VAR 0 2
1818: PPUSH
1819: CALL_OW 83
1823: AND
1824: IFFALSE 1834
// Result := true ;
1826: LD_ADDR_VAR 0 3
1830: PUSH
1831: LD_INT 1
1833: ST_TO_ADDR
// end ;
1834: LD_VAR 0 3
1838: RET
// every 0 0$3 trigger CanWinLoose marked 400 do
1839: CALL 1634 0 0
1843: IFFALSE 1852
1845: GO 1847
1847: DISABLE
// YouLostInMultiplayer ;
1848: CALL_OW 107
1852: END
// every 0 0$3 trigger CanWinLoose marked 401 do
1853: CALL 1634 0 0
1857: IFFALSE 1866
1859: GO 1861
1861: DISABLE
// YouWinInMultiplayer ;
1862: CALL_OW 106
1866: END
// every 0 0$3 marked 98 do var i , CanWin ;
1867: GO 1869
1869: DISABLE
1870: LD_INT 0
1872: PPUSH
1873: PPUSH
// begin if not HasPower ( your_side ) then
1874: LD_OWVAR 2
1878: PPUSH
1879: CALL 1698 0 1
1883: NOT
1884: IFFALSE 1895
// begin Multiplayer_Loose_Message ;
1886: CALL_OW 521
// enable ( 400 ) ;
1890: LD_INT 400
1892: ENABLE_MARKED
// end else
1893: GO 2028
// begin CanWin := true ;
1895: LD_ADDR_VAR 0 2
1899: PUSH
1900: LD_INT 1
1902: ST_TO_ADDR
// for i := 1 to 8 do
1903: LD_ADDR_VAR 0 1
1907: PUSH
1908: DOUBLE
1909: LD_INT 1
1911: DEC
1912: ST_TO_ADDR
1913: LD_INT 8
1915: PUSH
1916: FOR_TO
1917: IFFALSE 2014
// if Side_Positions [ i ] and MultiplayerSideAlive ( i ) and ( i <> your_side ) then
1919: LD_EXP 16
1923: PUSH
1924: LD_VAR 0 1
1928: ARRAY
1929: PUSH
1930: LD_VAR 0 1
1934: PPUSH
1935: CALL_OW 108
1939: AND
1940: PUSH
1941: LD_VAR 0 1
1945: PUSH
1946: LD_OWVAR 2
1950: NONEQUAL
1951: AND
1952: IFFALSE 2012
// if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
1954: LD_EXP 13
1958: PUSH
1959: LD_VAR 0 1
1963: ARRAY
1964: NOT
1965: PUSH
1966: LD_EXP 13
1970: PUSH
1971: LD_VAR 0 1
1975: ARRAY
1976: PUSH
1977: LD_EXP 13
1981: PUSH
1982: LD_OWVAR 2
1986: ARRAY
1987: NONEQUAL
1988: OR
1989: IFFALSE 2012
// if HasPower ( i ) then
1991: LD_VAR 0 1
1995: PPUSH
1996: CALL 1698 0 1
2000: IFFALSE 2012
// begin CanWin := false ;
2002: LD_ADDR_VAR 0 2
2006: PUSH
2007: LD_INT 0
2009: ST_TO_ADDR
// break ;
2010: GO 2014
// end ;
2012: GO 1916
2014: POP
2015: POP
// if CanWin then
2016: LD_VAR 0 2
2020: IFFALSE 2027
// enable ( 401 ) else
2022: LD_INT 401
2024: ENABLE_MARKED
2025: GO 2028
// enable ;
2027: ENABLE
// end ; end ;
2028: PPOPN 2
2030: END
// every 0 0$3 marked 99 do var i , CanWin ;
2031: GO 2033
2033: DISABLE
2034: LD_INT 0
2036: PPUSH
2037: PPUSH
// begin if not HasPower ( your_side ) then
2038: LD_OWVAR 2
2042: PPUSH
2043: CALL 1698 0 1
2047: NOT
2048: IFFALSE 2059
// begin Multiplayer_Loose_Message ;
2050: CALL_OW 521
// enable ( 400 ) ;
2054: LD_INT 400
2056: ENABLE_MARKED
// end else
2057: GO 2172
// begin CanWin := true ;
2059: LD_ADDR_VAR 0 2
2063: PUSH
2064: LD_INT 1
2066: ST_TO_ADDR
// for i := 1 to 8 do
2067: LD_ADDR_VAR 0 1
2071: PUSH
2072: DOUBLE
2073: LD_INT 1
2075: DEC
2076: ST_TO_ADDR
2077: LD_INT 8
2079: PUSH
2080: FOR_TO
2081: IFFALSE 2158
// if Side_Positions [ i ] and MultiplayerSideAlive ( i ) and ( i <> your_side ) then
2083: LD_EXP 16
2087: PUSH
2088: LD_VAR 0 1
2092: ARRAY
2093: PUSH
2094: LD_VAR 0 1
2098: PPUSH
2099: CALL_OW 108
2103: AND
2104: PUSH
2105: LD_VAR 0 1
2109: PUSH
2110: LD_OWVAR 2
2114: NONEQUAL
2115: AND
2116: IFFALSE 2156
// if not AlliedSides ( i , your_side ) then
2118: LD_VAR 0 1
2122: PPUSH
2123: LD_OWVAR 2
2127: PPUSH
2128: CALL 1753 0 2
2132: NOT
2133: IFFALSE 2156
// if HasPower ( i ) then
2135: LD_VAR 0 1
2139: PPUSH
2140: CALL 1698 0 1
2144: IFFALSE 2156
// begin CanWin := false ;
2146: LD_ADDR_VAR 0 2
2150: PUSH
2151: LD_INT 0
2153: ST_TO_ADDR
// break ;
2154: GO 2158
// end ;
2156: GO 2080
2158: POP
2159: POP
// if CanWin then
2160: LD_VAR 0 2
2164: IFFALSE 2171
// enable ( 401 ) else
2166: LD_INT 401
2168: ENABLE_MARKED
2169: GO 2172
// enable ;
2171: ENABLE
// end ; end ;
2172: PPOPN 2
2174: END
